import express from 'express';
import cors from 'cors';
import fetch from 'node-fetch';
import OpenAI from 'openai';

const app = express();
const PORT = 3001;
const openai = new OpenAI(
    {
        // 若没有配置环境变量，请用百炼API Key将下行替换为：apiKey: "sk-xxx",
        apiKey: 'sk-f9138071bd8a478083bd9c2ffbeb87e1', // 如何获取API Key：https://help.aliyun.com/zh/model-studio/developer-reference/get-api-key
        baseURL: "https://dashscope.aliyuncs.com/compatible-mode/v1",
    }
);

// 中间件
app.use(cors());
app.use(express.json());

// 千问API代理端点
app.post('/api/analyze-ingredients', async (req, res) => {
  try {
    const { userInput } = req.body;
    
    if (!userInput) {
      return res.status(400).json({ error: '缺少用户输入' });
    }
    
    // 千问API配置
    
    // System message (系统指令)
    const system_message = `你是一个专业的厨师，请根据用户想吃的菜品描述，分析出制作这道菜需要购买的食材清单。
    要求：
    1. 列出所有需要的主要食材和调料
    2. 为每种食材提供大致用量
    3. 按照重要性排序
    4. 只返回JSON格式，不要包含其他文字
    
    请按以下格式返回：
    {
      "ingredients": [
        {"name": "鸡蛋", "quantity": "3个"},
        {"name": "番茄", "quantity": "2个"},
        {"name": "食用油", "quantity": "适量"}
      ]
    }`;
    
    // User message (用户输入)
    const user_message = `用户想吃的菜品是：${userInput}`;
    
    // 调用千问API
    const completion = await openai.chat.completions.create({
        // 模型列表：https://help.aliyun.com/zh/model-studio/getting-started/models
        model: "qwen-plus",  // qwen-plus 属于 qwen3 模型，如需开启思考模式，请参见：https://help.aliyun.com/zh/model-studio/deep-thinking
        messages: [
            { role: "system", content: system_message },
            { role: "user", content: user_message }
        ],
    });
    const response = completion.choices[0].message.content;
    
    // 解析API返回结果
    try {
      // 提取JSON部分
      const jsonMatch = response.match(/\{[\s\S]*\}/);
      if (jsonMatch) {
        const result = JSON.parse(jsonMatch[0]);
        return res.json(result);
      }
    } catch (parseError) {
      console.error("JSON解析失败:", parseError);
      return res.status(500).json({ error: "AI返回结果解析失败" });
    }
    
    // 如果解析失败，返回空数组
    return res.json({ ingredients: [] });
    
  } catch (error) {
    console.error("调用千问API时出错:", error);
    res.status(500).json({ error: "服务器内部错误" });
  }
});

app.listen(PORT, () => {
  console.log(`代理服务器运行在端口 ${PORT}`);
});
